package com.jr.mapper;

import com.jr.pojo.ParkingRecords;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 停车记录表Mapper接口
 * 用于处理停车记录的数据库操作
 */
@Mapper
public interface ParkingRecordsMapper {
    
    /**
     * 插入停车记录
     * 根据传进来的ParkingRecords对象实现数据库parking_records表增加
     * 其中id，exitTime，duration没有值传入
     * createdAt，updatedAt为当前时间，status=0
     * vehicleId，parkingSpaceId，entryTime，createdBy有值传入
     * @param parkingRecords 停车记录对象
     * @return 新增数据的id
     */
    Integer insertParkingRecord(ParkingRecords parkingRecords);
    
    /**
     * 查询parking_records表中entry_time年月日部分等于date或exit_time年月日部分等于date的数据数量
     * @param date 传入的日期
     * @return 符合条件的数据数量
     */
    Integer countByEntryOrExitDate(@Param("date") Date date);
    
    /**
     * 查询parking_records表中entry_time年月日部分小于等于date1且exit_time年月日部分小于等于date2，或entry_time年月日部分小于等于date2的数据数量
     * @param date1 第一个日期参数
     * @param date2 第二个日期参数
     * @return 符合条件的数据数量
     */
    Integer countByDateRangeCondition(@Param("date1") Date date1, @Param("date2") Date date2);
    
    /**
     * 查询parking_records表中entry_time年月日部分等于date或exit_time年月日部分等于date的记录id集合
     * @param date 传入的日期
     * @return 符合条件的记录id集合
     */
    List<Integer> findIdsByEntryOrExitDate(@Param("date") Date date);
    
    /**
     * 查询parking_records表中entry_time年月日部分小于等于date1且exit_time年月日部分小于等于date2，或entry_time年月日部分小于等于date2的记录id集合
     * @param date1 第一个日期参数
     * @param date2 第二个日期参数
     * @return 符合条件的记录id集合
     */
    List<Integer> findIdsByDateRangeCondition(@Param("date1") Date date1, @Param("date2") Date date2);
}